#ifndef RTSP_DECOD_H
#define RTSP_DECOD_H

extern "C"
{
    #include "libavcodec/avcodec.h"
    #include "libavformat/avformat.h"
    #include "libswscale/swscale.h"
    #include "libavdevice/avdevice.h"
    #include "libswresample/swresample.h"
    #include "libavutil/imgutils.h"
}
#include <QDebug>
#include <QImage>
#include <QObject>

#include <iostream>

class Rtsp_Decod : public QObject
{
    Q_OBJECT
signals:
    void newFrame(const QImage &frame); // 声明信号
private:
    int show_width=1280;
    int show_height=720;
    bool stopDecoding=false;//是否停止解码显示
    bool suspendDecoding = false;//暂停编解码标志
    AVFormatContext* formatContext = nullptr;
    AVCodecContext* codecContext = nullptr;
    AVStream* videoStream = nullptr;
    SwsContext* swsContext = nullptr;
    QImage AVFrameToQImage(AVFrame *frame, AVCodecContext *codecContext);
    QImage frameToImage(AVFrame *frame);
    
public:
    explicit Rtsp_Decod(QObject *parent = nullptr);
    ~Rtsp_Decod();
    bool open(const std::string& url); // 打开RTSP流并初始化解码器。
    void close(); // 关闭RTSP流
    void decode(); // 解码循环,用于读取RTSP流中的数据包，并解码它们。
    
    void start();
    void stop();
    bool isStopped() const;
    bool isSuspendDecod() const;
    void set_SuspendDecod(bool a);
    void set_show_height(int a);//设置输出图像的高
    void set_show_width(int a);

};




#endif
